/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package graphviewer;
import java.awt.*;
import javax.swing.*;

/**
 *
 * @author Sabitov Artem
 * @since 09.07.2013
 */
public class Node extends JPanel {
	private double cX;
	private double cY;
	private double cOldX;
	private double cOldY;
	private double offsetX;
	private double offsetY;
	// возможные варианты
	// 0 - притяжение
	// 1 - отталкивание
	private int offsetType;
	// радиус ноды
	private int nodeRadius = 24;
	// количество нодов
	private static int nodeCount = 0;
	
	public Node(double x, double y) {
		cX = x;
		cY = y;
		nodeCount++;
		setBounds((int) cX, (int) cY, 71, 25);
		setOpaque(Debug.getStateDebugComponent());
		setBackground(Color.GREEN);
	}
	
	// отрисовка
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		Font font = new Font("Arial", 0, 9);
		g2d.setFont(font);
		g2d.drawString("x:" + cX, 30, 10);
		g2d.drawString("y:" + cY, 30, 20);
		g2d.fillOval(0, 0, nodeRadius, nodeRadius);
	}
	
	public int getNodeRadius() {
		return nodeRadius;
	}
	public void setNodeRadius(int radius) {
		nodeRadius = radius;
		this.repaint();
	}
	
	public static int getNodeCount() {
		return nodeCount;
	}
	
	// методы для работы с координатами
	public double getCoordX() {
		return cX;
	}
	public double getCoordY() {
		return cY;
	}
	public double getOldX() {
		return cOldX;
	}
	public double getOldY() {
		return cOldY;
	}
	
	public void setX(double x) {
		cX = x;
	}
	public void setY(double y) {
		cY = y;
	}
	public void setCoords(double x, double y) {
		cX = x;
		cY = y;
	}
	// методы для работы с смещением
	public void performOffset() {
		cOldX = cX;
		cOldY = cY;
		cX += offsetX;
		cY += offsetY;
		repaint();
		setBounds((int) cX, (int) cY, 71, 25);
	}
	public void addOffset(double moveX, double moveY) {
		offsetX += moveX;
		offsetY += moveY;
	}
	public void addOffsetX(int moveX) {
		offsetX += moveX;
	}
	public void addOffsetY(int moveY) {
		offsetY += moveY;
	}
	public double getOffsetX() {
		return offsetX;
	}
	public double getOffsetY() {
		return offsetY;
	}
	
	public void setTypeOffset(int typeOffset) {
		offsetType = typeOffset;
	}
	public void resetOffset() {
		offsetX = 0;
		offsetY = 0;
	}
}
